import 'dart:async';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

import 'state.dart';

class MarqueeController extends GetxController {
  MarqueeController();

  final state = MarqueeState();

  /// 在 widget 内存中分配后立即调用。
  @override
  void onInit() {
    super.onInit();
  }

  /// 在 onInit() 之后调用 1 帧。这是进入的理想场所
  @override
  void onReady() {
    super.onReady();
    fixSize(Get.context!);
  }

  void fixSize(BuildContext context) async {
    state.fixWidth =
        state.key.currentContext?.findRenderObject()?.paintBounds.size.width ??
            0;
    update();
    run();
  }

  void run() async {
    await state.scrollCtrl.animateTo(state.width + state.fixWidth,
        duration: const Duration(seconds: 10), curve: Curves.linear);
    state.scrollCtrl.jumpTo(0);
    run();
  }

  /// 在 [onDelete] 方法之前调用。
  @override
  void onClose() {
    state.timer?.cancel();
    state.scrollCtrl.dispose();
    super.onClose();
  }

  /// dispose 释放内存
  @override
  void dispose() {
    super.dispose();
  }
}
